package com.example.blog.service;

import java.util.List;
import java.util.Map;

import com.example.blog.entity.Blog;

public interface BlogService {
    /**
     * 创建博客
     */
    Map<String, Object> createBlog(Blog blog);
    
    /**
     * 更新博客
     */
    Map<String, Object> updateBlog(Blog blog);
    
    /**
     * 发布/取消发布博客
     */
    boolean updatePublishStatus(Integer blogId, Boolean isPublished);
    
    /**
     * 启用/禁用博客
     */
    boolean updateDisableStatus(Integer blogId, Boolean isDisabled);
    
    /**
     * 删除博客
     */
    boolean deleteBlog(Integer blogId);
    
    /**
     * 根据ID获取博客详情
     */
    Blog getBlogById(Integer blogId);
    
    /**
     * 获取所有博客
     */
    List<Blog> getAllBlogs();
    
    /**
     * 获取所有已发布博客
     */
    List<Blog> getAllPublishedBlogs();
    
    /**
     * 获取用户的所有博客
     */
    List<Blog> getBlogsByUserId(Integer userId);
    
    /**
     * 获取用户的已发布博客
     */
    List<Blog> getPublishedBlogsByUserId(Integer userId);
    
    /**
     * 获取某个分类下的博客
     */
    List<Blog> getBlogsByTypeId(Integer typeId);
    
    /**
     * 获取热门博客
     */
    List<Blog> getHotBlogs(Integer limit);
    
    /**
     * 搜索博客
     */
    List<Blog> searchBlogs(String keyword);
    
    /**
     * 增加浏览量
     */
    boolean incrementViews(Integer blogId);
    
    /**
     * 用户点赞博客
     */
    Map<String, Object> likeBlog(Integer userId, Integer blogId);
    
    /**
     * 用户取消点赞博客
     */
    Map<String, Object> unlikeBlog(Integer userId, Integer blogId);
    
    /**
     * 检查用户是否点赞了博客
     */
    boolean isLikedByUser(Integer userId, Integer blogId);
    
    /**
     * 获取用户点赞的所有博客ID
     */
    List<Integer> getLikedBlogIdsByUserId(Integer userId);
    
    /**
     * 获取所有博客（分页）
     */
    Map<String, Object> getAllBlogs(Integer pageNum, Integer pageSize, String query, Integer typeId);
    
    /**
     * 获取所有已发布博客（分页）
     */
    Map<String, Object> getAllPublishedBlogs(Integer pageNum, Integer pageSize, String query, Integer typeId);
    
    /**
     * 获取热门博客（最新/最多浏览/最多点赞）
     * @param sortType 排序类型：latest-最新，views-最多浏览，likes-最多点赞
     * @return 博客列表
     */
    List<Blog> getTopBlogs(String sortType);
    
    /**
     * 增加点赞数
     */
    boolean incrementLikes(Integer blogId);
} 